TypeORM で SyntaxError: Cannot use import statement outside a module エラーが発生した話
私が担当している案件では、Typescript, experss, TypeORM を使って開発しています。 先日、tscコマンドした後にnodeコマンドで実行したところ以下のようなエラーが出ました。
SyntaxError: Cannot use import statement outside a module
ネットでこのエラーを検索するとモジュールシステムをcommonjsにしているのが原因なのでES Modulesに変えるとよい、という記事があったので、package.jsonに "type": "module"
を追加してみたのですが解決しませんでした。
困っていたところ同僚に TSファイルをnodeコマンドで実行しようとした際も同じエラーが出ることを教えてもらいました。調査したところ、TypeORM の設定ファイルであるormconfig.tsに原因があることが分かりました。entitiesの部分でtsファイルを指定しているところです。
module.exports = { type: "postgres", host: process.env.DB_HOST, port: process.env.DB_PORT, username: process.env.DB_USER_NAME, password: process.env.DB_PASSWORD, database: process.env.DB_DATABASE, synchronize: false, entities: ["src/entity/*.ts"], };
ormconfig.tsを以下のように変更したところエラーがなくなりました。ローカルで開発している時はts-nodeで実行しているので*.ts
を読み込みます。サーバにデプロイする時はトランスパイルした Javasciript を実行するので*.js
に変えています。
module.exports = { type: "postgres", host: process.env.DB_HOST, port: process.env.DB_PORT, username: process.env.DB_USER_NAME, password: process.env.DB_PASSWORD, database: process.env.DB_DATABASE, synchronize: false, entities: [`src/entity/*.${process.env.ENV === "local" ? "ts" : "js"}`], };